// 这里是自定义的request
import axios from 'axios'
// import router from '../router'
import { useUserStore } from '@/store/customIndex'
import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router'
const router = useRouter()

const baseURL = import.meta.env.VITE_API_URL

const instance = axios.create({
  // TODO 1. 基础地址，超时时间50s
  baseURL,
  timeout: 50000
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    // TODO 2. 携带token
    if (userStore.token) {
      config.headers.Authorization = userStore.token
    }
    // 如果是文件上传请求，不设置 Content-Type，由浏览器自动设置
    if (!(config.data instanceof FormData)) {
      config.headers['Content-Type'] = 'application/json'
    }
    return config
  },
  (err) => Promise.reject(err)
)

// 响应拦截器
// response 拦截器
instance.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    // 兼容blob下载出错json提示
    // if (
    //   error.response.data instanceof Blob &&
    //   error.response.data.type.toLowerCase().indexOf('json') !== -1
    // ) {
    //   const reader = new FileReader()
    //   reader.readAsText(error.response.data, 'utf-8')
    //   reader.onload = function (e) {
    //     const errorMsg = JSON.parse(reader.result).message
    //     ElMessage.error(errorMsg)
    //   }
    // } else {
    let code = 0
    try {
      code = error.response.data.status
    } catch (e) {
      if (error.toString().indexOf('Error: timeout') !== -1) {
        ElMessage.error('网络请求超时')
        return Promise.reject(error)
      }
    }
    const userStore = useUserStore()
    console.log(code)
    if (code) {
      if (code === 401) {
        userStore.setUser(null)
        userStore.removeToken()
        router.push('/login')
      } else if (code === 403) {
        ElMessage.error('403')
        router.push('/')
      } else {
        const errorMsg = error.response.data.message
        if (errorMsg !== undefined) {
          ElMessage.error(errorMsg)
        }
      }
    } else {
      ElMessage.error('接口请求失败')
    }
    // }
    return Promise.reject(error)
  }
)

export default instance
export { baseURL }
